package hui.com.service;

import hui.com.model.req.sales.RequestGetLikeSalesForecast;
import hui.com.model.req.sales.RequestGetSalesForecast;
import hui.com.model.req.sales.RequestGetSalesForecastHistory;
import hui.com.model.res.sales.ResponeGetSalesForecast;
import hui.com.model.res.sales.ResponseGetSalesForecastList;
import hui.com.model.entity.sales.SalesForecastEntity;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface SalesForecastService {


    /**
     * 新增销售预测订单
     * @param sales 需要新增的订单对象
     * @return true/false
     */
    Boolean addSaleForecast(@Param("sales") SalesForecastEntity sales);

    /**
     * 获取单个订单
     * @param sales 订单对象，通过salesForecastID查询
     * @return true/false
     */
    SalesForecastEntity getSalesForecast(@Param("sales") SalesForecastEntity sales);

    /**
     * 单个订单的上一个
     * @param sales 订单对象,通过salesForecastID查询
     * @return 订单对象
     */
    ResponeGetSalesForecast getPrevSalesForecast(@Param("sales") RequestGetSalesForecast sales);

    /**
     * 单个订单的下一个
     * @param sales 对象,通过salesForecastID查询
     * @return 订单对象
     */
    ResponeGetSalesForecast getNextSalesForecast(@Param("sales") RequestGetSalesForecast sales);

    /**
     * 获取多个订单
     * @param sales 对象里面的字符串类型。进行模糊查询
     * @return 对象集
     */
    ResponseGetSalesForecastList getListSalesForecast(@Param("sales") RequestGetSalesForecast sales);

    /**
     *  getListSales 关联方法
     * @param sales 象里面的字符串类型。进行模糊查询
     * @return 总数量
     */
    Integer getListSalesForecastPage(@Param("sales") RequestGetSalesForecast sales);

    /**
     * 获取多个订单 纯模糊搜索
     * @param sales 对象里面的字符串类型。进行模糊查询
     * @return 对象集
     */
    ResponseGetSalesForecastList getLikeListSalesForecast(@Param("sales") RequestGetLikeSalesForecast sales);

    /**
     *  getLikeListSales 关联方法
     * @param sales 象里面的字符串类型。进行模糊查询
     * @return 总数量
     */
    Integer getLikeListSalesForecastPage(@Param("sales") RequestGetLikeSalesForecast sales);

    /**
     * 获取单个订单。并且关联联系人
     * 通过里面的salesCode变量查询
     */
    ResponeGetSalesForecast getSalesForecast_User(@Param("sales") SalesForecastEntity sales);



    /**
     * 修改订单
     * @param sales 需要修改的对象
     * @return true/false
     */
    Integer updateSalesForecast(@Param("sales") SalesForecastEntity sales);

    /**
     * 删除订单
     * @param id 删除订单
     * @return true/false
     */
    Boolean delSalesForecast(int id);

    /**
     * 历史记录查询
     * @param sales 通过salesForecastID查询
     * @return 对象
     */
    ResponeGetSalesForecast getHistorySales(@Param("sales") RequestGetSalesForecast sales);

    /**
     * 历史记录模糊查询
     * @param sales 对象里面的字符串类型。进行模糊查询
     * @return 对象
     */
    List<ResponeGetSalesForecast> getHistoryListSalesForecast(@Param("sales") RequestGetSalesForecast sales);

    /**
     *  getHistoryListSales 关联方法
     * @param sales 对象里面的字符串类型。进行模糊查询
     * @return 满足条件的总数量
     */
    Integer getHistoryListSalesForecastPage(@Param("sales") RequestGetSalesForecast sales);;

    /**
     * 新增历史记录
     * @param sales 对象里面的字符串类型。进行模糊查询
     * @return true/false
     */
    Boolean addHistorySaleForecast(@Param("sales") SalesForecastEntity sales);

    /**
     * 新增客户记录
     */
    Boolean addCustName(@Param("name")String name);

    /**
     * 模糊查询已存在查询客户。用于用户快速新增
     */
    String[] getCustNameArray(@Param("name")String name);

    /**
     * 历史记录指定code查询集合，关联创建人，和修改人
     */

    ResponseGetSalesForecastList getSalesForecastHistoryList_User(@Param("sales") RequestGetSalesForecastHistory sales);
    /**
     * 历史记录指定code查询集合，关联创建人，和修改人
     */
    ResponeGetSalesForecast getSalesForecastHistory_User(@Param("sales") RequestGetSalesForecastHistory sales);



    /**
     * 查询准备联系的客户是否存在
     */
    Boolean getCustNameExist(@Param("name")String name);


    /**
     * 获取准备新增的UID
     */
    String salesForecastADD_getSalesCode();
}
